package com.yjlove.myplay.ui.activity;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.yjlove.myplay.R;
import com.yjlove.myplay.base.BaseActivity;

import java.util.ArrayList;
import java.util.List;

/**
 * 作者 YJlvoe
 * 创建时间 2016/12/28.
 */
public class MPAndroidTestActivity extends BaseActivity implements View.OnClickListener {

    private PieChart mPieChart;
    private BarChart mBarChart;
    private LineChart mLineChart;

    private Button btn_piechart;
    private Button btn_barchart;
    private Button btn_linechart;

    @Override
    protected String getActivityTitle() {
        return getIntent().getStringExtra("title");
    }

    @Override
    protected int getActivityView() {
        return R.layout.activity_matest;
    }

    @Override
    protected void initView() {
        mPieChart = (PieChart) findViewById(R.id.piechart);
        mBarChart = (BarChart) findViewById(R.id.barchart);
        mLineChart = (LineChart) findViewById(R.id.linechart);

        btn_piechart = (Button) findViewById(R.id.btn_piechart);
        btn_barchart = (Button) findViewById(R.id.btn_barchart);
        btn_linechart = (Button) findViewById(R.id.btn_linechart);
        btn_piechart.setOnClickListener(this);
        btn_barchart.setOnClickListener(this);
        btn_linechart.setOnClickListener(this);

    }

    @Override
    protected void initData() {
        PieData mPieData = getPieData(4, 100);
        showPieChart(mPieChart, mPieData);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_piechart:
                mPieChart.setVisibility(View.VISIBLE);
                mBarChart.setVisibility(View.GONE);
                mLineChart.setVisibility(View.GONE);
                PieData mPieData = getPieData(4, 100);
                showPieChart(mPieChart, mPieData);
                break;
            case R.id.btn_barchart:
                mPieChart.setVisibility(View.GONE);
                mBarChart.setVisibility(View.VISIBLE);
                mLineChart.setVisibility(View.GONE);
                BarData mBarData = getBarData(4, 100);
                showBarChart(mBarChart, mBarData);
                break;
            case R.id.btn_linechart:
                mPieChart.setVisibility(View.GONE);
                mBarChart.setVisibility(View.GONE);
                mLineChart.setVisibility(View.VISIBLE);
                LineData mLineData = getLineData(36, 100);
                showLineChart(mLineChart, mLineData);
                break;
        }
    }

    // 设置折线图数据
    private LineData getLineData(int count, float range) {
        ArrayList<String> xValues = new ArrayList<String>();
        for (int i = 0; i < count; i++) {
            // x轴显示的数据，这里默认使用数字下标显示
            xValues.add("" + i);
        }


        ArrayList<Entry> yValues1 = new ArrayList<Entry>();
        ArrayList<Entry> yValues2 = new ArrayList<Entry>();
        ArrayList<Entry> yValues3 = new ArrayList<Entry>();


        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues1.add(new Entry(value, i));
        }

        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues2.add(new Entry(value, i));
        }

        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues3.add(new Entry(value, i));
        }

        // y轴的数据集合
        LineDataSet lineDataSet1 = new LineDataSet(yValues1, "已预付");
        //用y轴的集合来设置参数
        lineDataSet1.setLineWidth(1f); // 线宽
        lineDataSet1.setCircleSize(2f);// 显示的圆形大小
        lineDataSet1.setColor(Color.rgb(114, 188, 223));// 显示颜色
        lineDataSet1.setCircleColor(Color.rgb(114, 188, 223));// 圆形的颜色
        lineDataSet1.setHighLightColor(Color.rgb(114, 188, 223)); // 高亮的线的颜色

        LineDataSet lineDataSet2 = new LineDataSet(yValues2, "已确认");
        //用y轴的集合来设置参数
        lineDataSet2.setLineWidth(1f); // 线宽
        lineDataSet2.setCircleSize(2f);// 显示的圆形大小
        lineDataSet2.setColor(Color.rgb(255, 123, 124));// 显示颜色
        lineDataSet2.setCircleColor(Color.rgb(255, 123, 124));// 圆形的颜色
        lineDataSet2.setHighLightColor(Color.rgb(255, 123, 124)); // 高亮的线的颜色

        LineDataSet lineDataSet3 = new LineDataSet(yValues3, "已取消");
        //用y轴的集合来设置参数
        lineDataSet3.setLineWidth(1f); // 线宽
        lineDataSet3.setCircleSize(2f);// 显示的圆形大小
        lineDataSet3.setColor(Color.rgb(57, 135, 200));// 显示颜色
        lineDataSet3.setCircleColor(Color.rgb(57, 135, 200));// 圆形的颜色
        lineDataSet3.setHighLightColor(Color.rgb(57, 135, 200)); // 高亮的线的颜色

        // mLineDataSet.setFillAlpha(110);
        // mLineDataSet.setFillColor(Color.RED);

        ArrayList<LineDataSet> lineDataSets = new ArrayList<LineDataSet>();
        lineDataSets.add(lineDataSet1); // add the datasets
        lineDataSets.add(lineDataSet2); // add the datasets
        lineDataSets.add(lineDataSet3); // add the datasets

        LineData lineData = new LineData(xValues, lineDataSets);
        lineData.setDrawValues(true);
        lineData.setValueTextColor(Color.BLACK);
        lineData.setValueTextSize(10);
        //lineData.setGroupSpace(80f);//设置组数据间距

        return lineData;
    }

    // 设置折线图的样式
    private void showLineChart(LineChart lineChart, LineData lineData) {
        lineChart.setDrawBorders(false);  //是否在折线图上添加边框

        lineChart.setDescription("订单趋势图");// 数据描述
        // 如果没有数据的时候，会显示这个，类似listview的emtpyview
        lineChart.setNoDataTextDescription("You need to provide data for the chart.");

        lineChart.setDrawGridBackground(false); // 是否显示表格颜色
        //lineChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF); // 表格的的颜色，在这里是是给颜色设置一个透明度

        lineChart.setTouchEnabled(true); // 设置是否可以触摸
        lineChart.setDragEnabled(true);// 是否可以拖拽
        lineChart.setScaleEnabled(true);// 是否可以缩放

        lineChart.setPinchZoom(false);//

        //lineChart.setBackgroundColor(color);// 设置背景

        lineChart.setData(lineData); // 设置数据

        Legend mLegend = lineChart.getLegend(); // 设置比例图标示，就是那个一组y的value的

        // mLegend.setPosition(LegendPosition.LEFT_OF_CHART);
        mLegend.setForm(Legend.LegendForm.CIRCLE);// 样式
        mLegend.setFormSize(6f);// 字体
        mLegend.setTextColor(Color.WHITE);// 颜色
        //mLegend.setTypeface(mTf);// 字体

        XAxis xAxis = lineChart.getXAxis();
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawGridLines(false);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        lineChart.getAxisLeft().setDrawAxisLine(true);

        lineChart.animateX(2500); // 立即执行的动画,x轴
    }

    // 设置柱状图数据
    private BarData getBarData(int count, float range) {
        ArrayList<String> xValues = new ArrayList<String>();
        for (int i = 0; i < count; i++) {
            xValues.add("第" + (i + 1) + "季度");
        }

        ArrayList<BarEntry> yValues1 = new ArrayList<BarEntry>();
        ArrayList<BarEntry> yValues2 = new ArrayList<BarEntry>();
        ArrayList<BarEntry> yValues3 = new ArrayList<BarEntry>();

        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues1.add(new BarEntry(value, i));
        }

        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues2.add(new BarEntry(value, i));
        }

        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues3.add(new BarEntry(value, i));
        }

        // y轴的数据集合
        BarDataSet barDataSet1 = new BarDataSet(yValues1, "支出");
        barDataSet1.setColor(Color.rgb(114, 188, 223));
        BarDataSet barDataSet2 = new BarDataSet(yValues2, "利润");
        barDataSet2.setColor(Color.rgb(255, 123, 124));
        BarDataSet barDataSet3 = new BarDataSet(yValues3, "浪费");
        barDataSet3.setColor(Color.rgb(57, 135, 200));

        ArrayList<BarDataSet> barDataSets = new ArrayList<BarDataSet>();
        barDataSets.add(barDataSet1); // add the datasets
        barDataSets.add(barDataSet2); // add the datasets
        barDataSets.add(barDataSet3); // add the datasets

        BarData barData = new BarData(xValues, barDataSets);
        barData.setDrawValues(true);
        barData.setValueTextColor(Color.BLACK);
        barData.setValueTextSize(10);
        barData.setGroupSpace(80f);//设置组数据间距
        return barData;
    }

    // 设置柱状图样式
    private void showBarChart(BarChart barChart, BarData barData) {
        barChart.setDrawBorders(false);  //是否在折线图上添加边框

        barChart.setDescription("");// 数据描述

        // 如果没有数据的时候，会显示这个，类似ListView的EmptyView
        barChart.setNoDataTextDescription("You need to provide data for the chart.");

        barChart.setDrawGridBackground(false); // 是否显示表格颜色
        //barChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF); // 表格的的颜色，在这里是是给颜色设置一个透明度

        barChart.setTouchEnabled(true); // 设置是否可以触摸
        barChart.setDragEnabled(true);// 是否可以拖拽
        barChart.setScaleEnabled(true);// 是否可以缩放

        barChart.setPinchZoom(false);

        //barChart.setBackgroundColor();// 设置背景
        barChart.setDrawBarShadow(false);

        barChart.setData(barData); // 设置数据

        Legend mLegend = barChart.getLegend(); // 设置比例图标示

        mLegend.setForm(Legend.LegendForm.CIRCLE);// 样式
        mLegend.setFormSize(6f);// 字体
        mLegend.setTextColor(Color.BLACK);// 颜色

        //X轴设定
        //XAxis xAxis = barChart.getXAxis();
        //xAxis.setPosition(XAxisPosition.BOTTOM);
        XAxis xAxis = barChart.getXAxis();
        xAxis.setDrawAxisLine(true);
        xAxis.setDrawGridLines(false);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        barChart.getAxisLeft().setDrawAxisLine(true);
        //xAxis.setAxisLineColor(Color.rgb(0, 0, 0));

        barChart.animateY(2000);
    }

    // 设置饼状图数据
    private PieData getPieData(int count, float range) {

        ArrayList<String> xValues = new ArrayList<String>();  //xVals用来表示每个饼块上的内容

        for (int i = 0; i < count; i++) {
            xValues.add("Quarterly" + (i + 1));  //饼块上显示成Quarterly1, Quarterly2, Quarterly3, Quarterly4
        }

        List<Entry> yValues = new ArrayList<>();  //yVals用来表示封装每个饼块的实际数据

        // 饼图数据
        /**
         * 将一个饼形图分成四部分， 四部分的数值比例为14:14:34:38
         * 所以 14代表的百分比就是14%
         */
        float quarterly1 = 14;
        float quarterly2 = 14;
        float quarterly3 = 34;
        float quarterly4 = 38;

        yValues.add(new Entry(quarterly1, 0));
        yValues.add(new Entry(quarterly2, 1));
        yValues.add(new Entry(quarterly3, 2));
        yValues.add(new Entry(quarterly4, 3));

        //y轴的集合
        PieDataSet pieDataSet = new PieDataSet(yValues, "Quarterly Revenue 2014"/*显示在比例图上*/);
        pieDataSet.setSliceSpace(0f); //设置个饼状图之间的距离

        ArrayList<Integer> colors = new ArrayList<Integer>();

        // 饼图颜色
        colors.add(Color.rgb(205, 205, 205));
        colors.add(Color.rgb(114, 188, 223));
        colors.add(Color.rgb(255, 123, 124));
        colors.add(Color.rgb(57, 135, 200));

        pieDataSet.setColors(colors);

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        float px = 5 * (metrics.densityDpi / 160f);
        pieDataSet.setSelectionShift(px); // 选中态多出的长度

        PieData pieData = new PieData(xValues, pieDataSet);

        return pieData;
    }

    // 设置饼状图样式
    private void showPieChart(PieChart pieChart, PieData pieData) {

        pieChart.setHoleColorTransparent(true);
        //pieChart.setHoleColor(getResources().getColor(R.color.colorTransparent));
        pieChart.setHoleRadius(40f);  //半径
        pieChart.setTransparentCircleRadius(44f); // 半透明圈
        //pieChart.setHoleRadius(0)  //实心圆
        // mChart.setDrawYValues(true);
        pieChart.setDrawCenterText(true);  //饼状图中间可以添加文字
        pieChart.setDrawHoleEnabled(true);
        pieChart.setRotationAngle(90); // 初始旋转角度
        pieChart.setRotationEnabled(true); // 可以手动旋转
        pieChart.setUsePercentValues(true);  //显示成百分比
        pieChart.setCenterText("Quarterly Revenue");  //饼状图中间的文字
        //设置数据
        pieChart.setData(pieData);

        //pieChart.highlightValues(null);
        //pieChart.invalidate();

        Legend mLegend = pieChart.getLegend();  //设置比例图
        mLegend.setPosition(Legend.LegendPosition.LEFT_OF_CHART_INSIDE);  //最右边显示
        // mLegend.setForm(LegendForm.LINE);  //设置比例图的形状，默认是方形
        mLegend.setFormSize(12f);//比例块字体大小
        mLegend.setXEntrySpace(7f);
        mLegend.setYEntrySpace(5f);

        pieChart.animateXY(1000, 1000);  //设置动画
        // mChart.spin(2000, 0, 360);

        //Description desc = new Description();
        //desc.setText("测试饼状图");
        pieChart.setDescription("测试饼状图");
    }

}
